import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;


public class SM4Util {
	 private static final String name="SM4";                               //算法名字
	    private static final String transformation="SM4/ECB/PKCS7Padding";    //加密模式以及短快填充方式
	   // private static final String Default_iv="0123456789abcdef";            //加密使用的初始向量

	 
	    /**
	     * 使用指定的加密算法和密钥对给定的字节数组进行加密
	     * @param inputByte 要加密的字节数组
	     * @param key 加密所需的密钥
	     * @return 加密后的字节数组
	     * @throws Exception 如果加密时发生错误，则抛出异常
	     */
	    public static byte [] encode(byte [] inputByte, byte [] key) throws Exception {
	        // 获取加密实例
	        Cipher c = Cipher.getInstance(transformation);
	        // 根据密钥的字节数组创建 SecretKeySpec
	        SecretKeySpec secretKeySpec = new SecretKeySpec(key, name);
	        // 创建 IvParameterSpec 对象，使用默认向量和字符集
	     //   IvParameterSpec ivParameterSpec = new IvParameterSpec(Default_iv.getBytes(StandardCharsets.UTF_8));
	        // 初始化加密实例
	        c.init(Cipher.ENCRYPT_MODE, secretKeySpec);
	        // 返回加密后的字节数组
	        return c.doFinal(inputByte);
	    }


	    public static byte[] decode(byte[] inputBytes, byte[] key) throws Exception {
	        Cipher cipher = Cipher.getInstance(transformation);
	        SecretKeySpec secretKeySpec = new SecretKeySpec(key, name);
	      //  IvParameterSpec ivParameterSpec = new IvParameterSpec(Default_iv.getBytes(StandardCharsets.UTF_8));
	        cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);
	        return cipher.doFinal(inputBytes);
	    }

	 
}
